#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100

char arruma(char letra);
int palindromo(char string[]);


int main() {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;

  pFile = fopen ( "wikipedia.txt" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // obtain file size:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // allocate memory to contain the whole file:
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // copy the file into the buffer:
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

  /* the whole file is now loaded in the memory buffer. */
  int i = 0, j = 0, k = 0;
  char palavra[100000];

  while(i < strlen(buffer)) {
    while(isalpha(buffer[i])) {
        palavra[j] = buffer[i]; j++; i++;
    }
    palavra[j] = '\0';
    j = 0;
    //printf("%s\n",palavra);
    if(palindromo(palavra) == 0 && strlen(palavra) > 1) {

            printf("a palavra %s é palíndromo\n",palavra);
    }

    i++;
  }

  // terminate
  fclose (pFile);
  free (buffer);

  return 0;
}

int palindromo(char string[]) {

  char strcomespaco[MAX],str1[MAX], str2[MAX];
  int tamcomespaco,tam, i, j;

  strcpy(strcomespaco,string);

  tamcomespaco = strlen(strcomespaco);

  for(i=0,j=0;i<tamcomespaco;i++) {
     strcomespaco[i] = arruma(strcomespaco[i]);
    if(isalpha(strcomespaco[i])) {
        str1[j] = strcomespaco[i];
        j++;
    }
  }

    str1[j]='\0';

    tam = strlen(str1);

    for (i=tam-1,j=0;i>=0;i--,j++){
    str2[j] = str1[i];
    if(str2[j] != str1[j])//Verifica se a primeira letra é diferente da ultima, se for não é palindromo, se não for continua comparando até o fim da palavra.
        return 1;
    }

    str2[tam] = '\0';


        return 0;
}

char arruma(char letra) {
    if(letra >= 65 && letra <= 90)
        letra = letra + 32;

    return letra;
}
